[アップデート]EKS Upgrade insights がアドオンや kubelet、kube-proxy などもアップグレード適合性をチェックするようになりました
先日、EKS Upgrade insights がアドオンや kubelet、kube-proxy など、より広い範囲をチェックするようになりました。
何が変わったか
これまでも Upgrade Insights を利用することで、 Kubernetes で廃止予定の API が使われていないかを確認することができました。
Deprecated API Migration Guide で列挙されているような、Kubernetes の世界での古いリソース利用を検知する形です。
ただ、実際に EKS をアップグレードしようとすると、アドオンがアップグレード先に対応しているかといった EKS 固有の内容も確認する必要がありました。
※ アドオンは AWS によって抽象化されているため、Kubernetes マニフェストとして定義してデプロイされるわけではありません。一方で、Kubernetes クラスターに Pod としてデプロイされるソフトウェアであり、Kubernetes バージョンとの互換性を考える必要があります。
今回のアップデートでこの辺りのバージョン適合性も確認可能になりました!
また、アドオンに限らず kube-proxy、kubelet といった Kuberentes の動作に必須のコンポーネントに関しても Kuberntes バージョンとの適合性を確認可能になっています。
Auto Mode の場合は?
アップデートの内容から考えると若干本筋から外れるのですが、EKS には直近 Auto Mode が追加されています。
Auto Mode だと AWS が管理する範囲が増えており、 kubelet や kube-proxy はユーザー管理では無くなっています。
Upgrade Insights においても、ステータスが不明になり、閲覧することができませんでした。
また、Auto Mode では EBS CSI driver や Pod Identity Agent など、多くのアドオンも AWS 管理になっています。
とはいえ EFS CSI driver や CloudWatch Observability EKS アドオンなど、ユーザー管理する必要があるアドオンも存在しています。
これらの管理については、Auto Mode でも今回のアップデートの恩恵を受けることができそうです。
EKS アドオンのバージョンチェックを確認してみる
アップデート内容がわかりやすそうなので、非 Auto Mode の EKS クラスターで試してみます。
下記設定ファイルで、eksctl を利用して EKS クラスターを作成します。
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: test-cluster
region: ap-northeast-1
version: "1.30"
iam:
withOIDC: true
cloudWatch:
clusterLogging:
enableTypes:
- "audit"
- "authenticator"
- "controllerManager"
- "scheduler"
nodeGroups:
- name: ng-1
instanceType: m5.large
desiredCapacity: 1
autoModeConfig:
enabled: false
構築完了後、Upgrade Insights を確認してみます。
今までも閲覧可能だった「Deprecated APIs removed in Kubernetes v1.32」は合格していますが、「EKS add-on version compatibility」で違反してますね。
違反内容について確認していきます。
検知されている CoreDNS アドオンのバージョンを確認すると、v1.11.1-eksbuild.8
となっています。
EKS 1.30 対応バージョンには含まれています。
% eksctl utils describe-addon-versions --kubernetes-version 1.30 --name coredns | grep AddonVersion
"AddonVersions": [
"AddonVersion": "v1.11.4-eksbuild.1",
"AddonVersion": "v1.11.3-eksbuild.2",
"AddonVersion": "v1.11.3-eksbuild.1",
"AddonVersion": "v1.11.1-eksbuild.13",
"AddonVersion": "v1.11.1-eksbuild.11",
"AddonVersion": "v1.11.1-eksbuild.9",
"AddonVersion": "v1.11.1-eksbuild.8",
"AddonVersion": "v1.11.1-eksbuild.6",
"AddonVersion": "v1.11.1-eksbuild.4",
"AddonVersion": "v1.10.1-eksbuild.17",
"AddonVersion": "v1.10.1-eksbuild.15",
"AddonVersion": "v1.10.1-eksbuild.13",
"AddonVersion": "v1.10.1-eksbuild.11",
"AddonVersion": "v1.10.1-eksbuild.10",
"AddonVersion": "v1.10.1-eksbuild.7",
一方で EKS 1.31 には対応していないため、たしかにアップグレードが必要ですね。
% eksctl utils describe-addon-versions --kubernetes-version 1.31 --name coredns | grep AddonVersion
"AddonVersions": [
"AddonVersion": "v1.11.4-eksbuild.1",
"AddonVersion": "v1.11.3-eksbuild.2",
"AddonVersion": "v1.11.3-eksbuild.1",
"AddonVersion": "v1.11.1-eksbuild.13",
"AddonVersion": "v1.11.1-eksbuild.11",
"AddonVersion": "v1.10.1-eksbuild.17",
"AddonVersion": "v1.10.1-eksbuild.15",
"AddonVersion": "v1.10.1-eksbuild.13",
最新のバージョンである、v1.11.4-eksbuild.1
にアップグレードしてみます。
アップグレード後、coredns のステータスが合格に変わっていました。
ちなみに、アップグレードした後即時に反映されるようなものではなく、1 日経って再度確認するとステータスが更新されているようなイメージでした。
※ スクリーンショットでは CoreDNS のバージョンアップと合わせて、EBS CSI driver を追加しているので新しく検知されています。
kubelet、kube-proxy のバージョンチェックを確認してみる
kube-apiserver と kubelet のバージョン差異は 3 つまで許容されます。
kubelet must not be newer than kube-apiserver.
kubelet may be up to three minor versions older than kube-apiserver (kubelet < 1.25 may only be up to two minor versions older than kube-apiserver).
Example:
kube-apiserver is at 1.32
kubelet is supported at 1.32, 1.31, 1.30, and 1.29
https://kubernetes.io/releases/version-skew-policy/#kubelet
Upgrade Insights では kube-apiserver と kubelet のバージョン差が 2 以上になりそうな時に検知されるようです。
kubelet のバージョンが 1.28 の際に、コントロールプレーンを 1.30 に上げる前に確認して!という形で警告が出ました。
バージョンアップグレード時に 1 つ分の差は毎回発生するので、それを超えて差分が出そうな時に検知する形ですね。
検知されたらコントロールプレーンのバージョンアップの前に EKS ノードを更新した方が良さそうです。
最後に
EKS Upgrade Insights を利用して、より楽かつ安全にバージョンアップをしていきましょう!